观察发现 $\texttt{B}$ 及其的小,可以想到对于第 $i$ 个人,状压自己以及自己后面 $7$ 个人的打饭状态即可。
设 $dp_{i,j}$ 表示打饭到第 $i$ 个人,第 $i$ 个人以及其后面 $7$ 人的打饭状态为 $j$ 的时候的最短时间。转移的时候看在当前状态 $j$ 下有那些人没有打饭,然后给其打饭转移即可(显然还有忍耐度的限制)。
但是经过打饭操作我们无法得出这道菜的时间——因为我们不清楚上一个打饭的是谁。这个时候再记一维状态即可。
设 $dp_{i,j,k}$ 表示( $i,j$ 的意义与上面相同),上一次打饭的人的编号就是 $i+k$ (注意 $k$ 的取值为 $-8$ 至 $7$ ,所以实际实现中我们需要将 $k$ 加上 $8$ 后再记入数组) 。
Code:
1 |
|
本文标题:【题解】 [SDOI2009]学校食堂 状压DP luoguP2157
文章作者:Qiuly
发布时间:2019年05月17日 - 00:00
最后更新:2019年05月17日 - 10:03
原始链接:http://qiulyblog.github.io/2019/05/17/[题解]luoguP2157/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。